home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Games Collection 1 / software vault.zip / software vault / CDR10 / YICN23.ZIP / UNITS / YAKKEYS.CPP < prev    next >
C/C++ Source or Header  |  1993-02-14  |  907b  |  46 lines

  1. #define YAKKEYSUNIT
  2. #include "yakkeys.h"
  3. #include <dos.h>
  4. #include <mem.h>
  5. #include <stdlib.h>
  6.  
  7. yakKeyboard keyboard;
  8.  
  9. char yakKeyboard::keys[128];
  10. void interrupt (*yakKeyboard::oldHandler)(...) = NULL;
  11.  
  12. void interrupt yakKeyboard::newHandler(...)
  13. {
  14.   static word * bufferTail, *bufferHead;
  15.   byte keyCode = inp(0x60);
  16.   if (keyCode & 0x80)
  17.     keys[keyCode & 0x7F] = 0;
  18.   else
  19.   {
  20.     keys[keyCode] = 1;
  21.   }
  22.   bufferTail = (word *)MK_FP(0x40, 0x1A);
  23.   bufferHead = (word *)MK_FP(0x40, 0x1C);
  24.   *bufferTail = *bufferHead;
  25.   oldHandler();
  26. }
  27.  
  28. void yakKeyboard::install(void)
  29. {
  30.   static int firstTime = 1;
  31.   oldHandler = getvect(9);
  32.   memset(keys, 0, sizeof(keys));
  33.   setvect(9, &yakKeyboard::newHandler)
  34.   ;
  35.   if (firstTime)
  36.   {
  37.     atexit((void (*)())&(yakKeyboard::remove));
  38.     firstTime = 0;
  39.   }
  40. }
  41.  
  42. void yakKeyboard::remove(void)
  43. {
  44.   setvect(9, oldHandler);
  45. }
  46.